package com.simple.util.base.extend;

/**
 * @program: simple_tools
 * @description: 二进制状态工具类
 * @author: Mr.chen
 * @create: 2019-10-19 09:13
 **/
public class BitStateUtil {
    // 用户默认状态
    public final static Long STATE_DEFAULT = 1L << 0;
    // 用户状态1
    public final static Long STATE_ONE = 1L << 1;
    // 用户状态2
    public final static Long STATE_TWO = 1L << 2;
    // 用户状态3
    public final static Long STATE_THREE = 1L << 3;

    /**
     * @param states 所有状态值
     * @param value  需要判断状态值
     * @return 是否存在
     */
    public static boolean hasState(long states, long value) {
        return (states & value) != 0;
    }

    /**
     * @param states 已有状态值
     * @param value  需要添加状态值
     * @return 新的状态值
     */
    public static long addState(long states, long value) {
        if (hasState(states, value)) {
            return states;
        }
        return (states | value);
    }

    /**
     * @param states 已有状态值
     * @param value  需要删除状态值
     * @return 新的状态值
     */
    public static long removeState(long states, long value) {
        if (!hasState(states, value)) {
            return states;
        }
        return states ^ value;
    }
}
